package _17_InnerClass;
/**
 * 内部类 : 就是在类体中编写的类
 * 
 * 内部类的重要作用 : 可以访问外部类私有化数据
 * 
 * 变量 : 
 * 		成员变量 --- 普通内部类/成员内部类
 * 		静态变量 --- 静态内部类
 * 		局部变量 --- 局部内部类
 * 		形参和实参变量 --- 匿名内部类
 * 
 * 关于成员内部类
 * 		1.成员内部类可以看做成员变量
 * 		2.成员内部类中不能有静态声明
 * 		3.成员内部类中可以直接访问外部类所有数据
 * 
 * @author lenovo
 * @Date 2020年7月11日
 * @Time 下午7:58:55
 */
public class OuterClass_01 {
	private static String s1 = "静态变量";
	private String s2 = "成员变量";

	// 类体中没有 static 修饰的类是成员内部类
	class InnerClass {
		// 成员内部类中不能有静态声明
		// 成员内部类中可以使用权限修饰符,比如 : private class xxx
		// 编译之后的类名 外部类类名$内部类类名 OuterClass_01$InnerClass

//		static String aa = " ";
//		public static void m1() {
//			不能有静态声明
//		}
		public void m2() {
			// 可以直接访问外部类的所有属性
			System.out.println(s1);
			System.out.println(s2);
		}

		class A {

		}
	}

	public static void main(String[] args) {
		// 外部类对象
		OuterClass_01 oc = new OuterClass_01();

		// 使用外部类对象.new 内部类() 来创建内部类对象
		InnerClass inner = oc.new InnerClass();
		inner.m2();

		System.out.println(inner);
		InnerClass inner1 = new OuterClass_01().new InnerClass();
//		静态变量
//		成员变量
//		_17_InnerClass.OuterClass_01$InnerClass@15db9742

	}

}
